package com.example.clock_demo.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.clock_demo.dto.AttendanceDailyRecordDTO;
import com.example.clock_demo.dto.AttendanceMonthlyReportDTO;
import com.example.clock_demo.dto.MonthlyAttendanceSummaryByTeamDTO;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.time.LocalDate;
import java.time.YearMonth;

public interface AttendanceService {



    /**
     * 查询指定条件和月份的月度考勤报告，支持分页。
     * @param yearMonth 月份 (YearMonth 对象)
     * @param teamName 班组名称 (模糊查询，可选)
     * @param employeeName 姓名 (模糊查询，可选)
     * @param pageNum 当前页码
     * @param pageSize 每页记录数
     * @return 分页的月度考勤报告列表
     */
    Page<AttendanceMonthlyReportDTO> getMonthlyAttendanceReports(
            YearMonth yearMonth, String teamName, String employeeName, long pageNum, long pageSize);

    /**
     * 查询任意人员在指定时间段内的日考勤记录，支持分页。
     * @param startDate 查询开始日期
     * @param endDate 查询结束日期
     * @param teamName 班组名称 (模糊查询，可选)
     * @param employeeName 姓名 (模糊查询，可选)
     * @param pageNum 当前页码
     * @param pageSize 每页记录数
     * @return 分页的日考勤记录列表
     */
    Page<AttendanceDailyRecordDTO> getDailyAttendanceRecords(
            LocalDate startDate, LocalDate endDate, String teamName, String employeeName, long pageNum, long pageSize);


    /**
     * 获取月度考勤汇总（按单位统计）
     * @param yearMonth 年月
     * @param teamName 单位名称（可选，模糊查询）
     * @param pageNum 页码
     * @param pageSize 页面大小
     * @return 分页的月度考勤汇总列表
     */
    Page<MonthlyAttendanceSummaryByTeamDTO> getMonthlyAttendanceSummaryByTeam(
            YearMonth yearMonth, String teamName, long pageNum, long pageSize);


    /**
     * 导出月度考勤报表
     * @param yearMonth 年月
     * @param teamName 班组名称（可选）
     * @param employeeName 员工姓名（可选）
     * @param response HTTP响应对象
     */
    void exportMonthlyAttendanceReport(YearMonth yearMonth, String teamName, String employeeName, HttpServletResponse response) throws IOException;


    /**
     * 导出月度考勤汇总报表
     */
    public void exportMonthlySummaryReport(
            YearMonth yearMonth, String teamName, String employeeName,
            HttpServletResponse response) throws IOException;

    /**
     * 新增：导出日考勤记录
     * @param startDate 查询开始日期
     * @param endDate 查询结束日期
     * @param teamName 班组名称 (模糊查询，可选)
     * @param employeeName 姓名 (模糊查询，可选)
     * @param response HTTP响应对象
     * @throws IOException IO异常
     */
    void exportDailyAttendanceRecords(
            LocalDate startDate, LocalDate endDate, String teamName, String employeeName, HttpServletResponse response) throws IOException;
}